package com.pajk.user.api;

import java.util.Date;
import java.util.List;

import com.pajk.user.model.CreditHis;

/**
 * User: haihua.chenhh
 * Date: 14-3-21
 * Time: 下午2:43
 */
public interface CreditService {
    /**
     * 根据actionCode,增加用户积分操作
     * @param userId 用户Id
     * @param actionId 操作流水Id
     * @param actionCode 操作code
     * @param appFrom 来源应用名称
     * @param actionTime 操作的时间
     * @return 增加的积分数
     */
    public Integer addCredit(Long userId, String actionId, String actionCode, String appFrom, Date actionTime);
    
    /**
     * 减积分
     * @param userId 用户ID
     * @param actionId 操作ID号
     * @param actionCode 操作类型
     * @param appFrom 应用来源
     * @param credit 积分值
     */
    public void reduceCredit(Long userId, String actionId, String actionCode, Integer credit, String appFrom);

    
    /**
     * 消费撤消
     * @param userId 用户ID
     * @param credit 原消费金额
     * @param cancelCredit 退货金额
     * @param cancelTTNumber 原单号
     * @param actionId 操作单号
     * @return 积分余额
     */
    public int cancelReduceCredit(Long userId, int credit, int cancelCredit,
                                   String cancelTTNumber, String actionId) ;
        
    /**
     * 查万里通积分
     * @param wltAccount 万里通帐号
     * @return 万里通积分值
     */
    public Integer queryWltCredit(String wltAccount);

    /**
     * 查万里通积分
     * @param userId 用户ID
     * @return 万里通积分值
     */
    public Integer queryWltCreditByUserId(Long userId);

    /**
     * 积分消费结果查询
     * @param actionId 操作ID/交易ID
     * @return 积分余额
     */
    public boolean queryConsumeCredit(String actionId);

    
    /**
     * @param userId 用户ID
     * @param actionCode 积分类别
     * @param actionTime 操作时间  actionTime为null，则忽略actionTime
     * @return 上述三个过滤条件下的积分流水
     */
    public List<CreditHis> getCreditHisByInfo(long userId, String actionCode, Date actionTime );

    /**
     * @param userId 用户ID
     * @param actionCodeList  积分类别集合
     * @param actionTime 操作时间  actionTime为null，则忽略actionTime
     * @return 上述三个过滤条件下的积分流水总和
     */
    public int  getCreditHisByActionCodeList(long userId, List actionCodeList, Date actionTime );

    /**
     * @param userId         用户ID
     * @param actionCodePrefix 积分类别前缀
     * @param actionTime     操作时间  actionTime为null，则忽略actionTime
     * @return 上述三个过滤条件下的积分流水总和
     */
    public int getCreditHisByActionCodePrefix(long userId, String actionCodePrefix, Date actionTime);

}
